package com.vimeworks.vimemannager.modelo.aplicacion;

// Generated Jul 17, 2012 4:05:51 PM by Hibernate Tools 3.4.0.CR1

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * AsignacionIntegrante generated by hbm2java
 */
@Entity
@Table(name = "vm_asignacion_integrante", schema = "public")
public class AsignacionIntegrante implements java.io.Serializable {

	private BigDecimal codigo;
	private EquipoTrabajo equipoTrabajo;
	private Rol rol;
	private Usuario usuario;
	private Date fechaAsignacion;
	private String lider;
	private String estado;
	private String funciones;
	private Set<Tarea> tareas = new HashSet<Tarea>(0);

	public AsignacionIntegrante() {
	}

	public AsignacionIntegrante(BigDecimal codigo, EquipoTrabajo equipoTrabajo,
			Rol rol, Usuario usuario, Date fechaAsignacion, String lider,
			String estado) {
		this.codigo = codigo;
		this.equipoTrabajo = equipoTrabajo;
		this.rol = rol;
		this.usuario = usuario;
		this.fechaAsignacion = fechaAsignacion;
		this.lider = lider;
		this.estado = estado;
	}

	public AsignacionIntegrante(BigDecimal codigo, EquipoTrabajo equipoTrabajo,
			Rol rol, Usuario usuario, Date fechaAsignacion, String lider,
			String estado, String funciones, Set<Tarea> tareas) {
		this.codigo = codigo;
		this.equipoTrabajo = equipoTrabajo;
		this.rol = rol;
		this.usuario = usuario;
		this.fechaAsignacion = fechaAsignacion;
		this.lider = lider;
		this.estado = estado;
		this.funciones = funciones;
		this.tareas = tareas;
	}

	@Id
	@Column(name = "codigo", unique = true, nullable = false, scale = 0)
	@SequenceGenerator(name="GENERADOR_CODIGO_ASI_INT", sequenceName="VM_SEQ_COD_ASI_INT", allocationSize=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="GENERADOR_CODIGO_ASI_INT")
	public BigDecimal getCodigo() {
		return this.codigo;
	}

	public void setCodigo(BigDecimal codigo) {
		this.codigo = codigo;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "equipo_trabajo", nullable = false)
	public EquipoTrabajo getEquipoTrabajo() {
		return this.equipoTrabajo;
	}

	public void setEquipoTrabajo(EquipoTrabajo equipoTrabajo) {
		this.equipoTrabajo = equipoTrabajo;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "rol", nullable = false)
	public Rol getRol() {
		return this.rol;
	}

	public void setRol(Rol rol) {
		this.rol = rol;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "usuario", nullable = false)
	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "fecha_asignacion", nullable = false, length = 29)
	public Date getFechaAsignacion() {
		return this.fechaAsignacion;
	}

	public void setFechaAsignacion(Date fechaAsignacion) {
		this.fechaAsignacion = fechaAsignacion;
	}

	@Column(name = "lider", nullable = false, length = 2)
	public String getLider() {
		return this.lider;
	}

	public void setLider(String lider) {
		this.lider = lider;
	}

	@Column(name = "estado", nullable = false, length = 3)
	public String getEstado() {
		return this.estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	@Column(name = "funciones")
	public String getFunciones() {
		return this.funciones;
	}

	public void setFunciones(String funciones) {
		this.funciones = funciones;
	}

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "asignacionIntegrante")
	public Set<Tarea> getTareas() {
		return this.tareas;
	}

	public void setTareas(Set<Tarea> tareas) {
		this.tareas = tareas;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((fechaAsignacion == null) ? 0 : fechaAsignacion.hashCode());
		result = prime * result + ((rol == null) ? 0 : rol.hashCode());
		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		AsignacionIntegrante other = (AsignacionIntegrante) obj;
		if (rol == null) {
			if (other.rol != null)
				return false;
		} else if (!rol.getCodigo().equals(other.rol.getCodigo()))
			return false;
		if (usuario == null) {
			if (other.usuario != null)
				return false;
		} else if (usuario.getId() != other.usuario.getId())
			return false;
		return true;
	}

}
